//// HelloTexture.cpp : Defines the entry point for the console application.
////
//// include DevIL for image loading
//#include <IL/il.h>
//
//// assimp include files. These three are usually needed.
//#include <assimp.hpp>	
//#include <aiPostProcess.h>
//#include <aiScene.h>
//
//
//// include GLEW to access OpenGL 3.3 functions
//#include <GL/glew.h>
//
//// GLUT is the toolkit to interface with the OS
//#include <GL/freeglut.h>
//#include "TextFile.h"
//#include <fstream>
//GLuint vertexShader;
//GLuint fragmentShader;
//GLuint programObject;
/////
//// Create a shader object, load the shader source, and
//// compile the shader.
////
//GLuint LoadShader ( GLenum type, const char *shaderSrc )
//{
//	GLuint shader;
//	GLint compiled;
//
//	// Create the shader object
//	shader = glCreateShader ( type );
//
//	if ( shader == 0 )
//		return 0;
//
//	// Load the shader source
//	glShaderSource ( shader, 1, &shaderSrc, NULL );
//
//	// Compile the shader
//	glCompileShader ( shader );
//
//	// Check the compile status
//	glGetShaderiv ( shader, GL_COMPILE_STATUS, &compiled );
//
//	if ( !compiled ) 
//	{
//		GLint infoLen = 0;
//
//		glGetShaderiv ( shader, GL_INFO_LOG_LENGTH, &infoLen );
//
//		if ( infoLen > 1 )
//		{
//			char* infoLog = (char*)malloc (sizeof(char) * infoLen );
//
//			glGetShaderInfoLog ( shader, infoLen, NULL, infoLog );
//			printf ( "Error compiling shader:\n%s\n", infoLog );            
//
//			free ( infoLog );
//		}
//
//		glDeleteShader ( shader );
//		return 0;
//	}
//
//	return shader;
//
//}
//void testSetValue(int** p)
//{
//	*p = new int(10);
//}
//int init()					 
//{
//	int a = 100;
//	int* pp = &a;
//	printf("================%d\n",pp);
//	printf("================%d\n",*pp);
//	printf("================%d\n",&pp);
//
//	int* p = NULL;
//	printf("================%d\n",p);
//	printf("================%d\n",&p);
//	testSetValue(&p);
//	printf("================%d\n",p);
//	printf("================%d\n",*p);
//	GLint linked;
//	char *vs = textFileRead("VertexShader.vert");
//	char *fs = textFileRead("PixelShader.frag");
//	const char *vv = vs;
//	const char *ff = fs;
//	// Load the vertex/fragment shaders
//	vertexShader = LoadShader ( GL_VERTEX_SHADER, vv );
//	fragmentShader = LoadShader ( GL_FRAGMENT_SHADER, ff );
//
//	// Create the program object
//	programObject = glCreateProgram ( );
//
//	if ( programObject == 0 )
//		return 0;
//
//	glAttachShader ( programObject, vertexShader );
//	glAttachShader ( programObject, fragmentShader );
//
//	// Bind vPosition to attribute 0   
//	glBindAttribLocation ( programObject, 0, "vPosition" );
//
//	// Link the program
//	glLinkProgram ( programObject );
//
//	// Check the link status
//	glGetProgramiv ( programObject, GL_LINK_STATUS, &linked );
//
//	if ( !linked ) 
//	{
//		GLint infoLen = 0;
//
//		glGetProgramiv ( programObject, GL_INFO_LOG_LENGTH, &infoLen );
//
//		if ( infoLen > 1 )
//		{
//			char* infoLog = (char*)malloc (sizeof(char) * infoLen );
//
//			glGetProgramInfoLog ( programObject, infoLen, NULL, infoLog );
//			printf ( "Error linking program:\n%s\n", infoLog );            
//
//			free ( infoLog );
//		}
//
//		glDeleteProgram ( programObject );
//		return FALSE;
//	}
//	glClearColor ( 0.0f, 0.0f, 0.0f, 0.0f );
//
//	return true;
//}
//
//void processMouseButtons(int button, int state, int xx, int yy) 
//{
//
//}
//void processKeys(unsigned char key, int xx, int yy) 
//{
//
//}
//void processMouseMotion(int xx, int yy)
//{
//}
//void mouseWheel(int wheel, int direction, int x, int y)
//{
//}
//void changeSize(int w, int h) {}
//void renderScene(void) 
//{
//	GLfloat vVertices[] = {  0.0f,  0.5f, 0.0f, 
//		-0.5f, -0.5f, 0.0f,
//		0.5f, -0.5f, 0.0f };
//
//	// Set the viewportw
//	glViewport ( 0, 0, 320,320 );
//
//	// Clear the color buffer
//	glClear ( GL_COLOR_BUFFER_BIT );
//
//	// Use the program object
//	glUseProgram ( programObject );
//
//	// Load the vertex data
//	glVertexAttribPointer ( 0, 3, GL_FLOAT, GL_FALSE, 0, vVertices );
//	glEnableVertexAttribArray ( 0 );
//
//	glDrawArrays ( GL_TRIANGLES, 0, 3 );
//	glutSwapBuffers();
//
//}
//int _tmain(int argc, char **argv)
//{
//	//test();
//	//  GLUT initialization
//	glutInit(&argc, argv);
//
//	glutInitDisplayMode(GLUT_DEPTH|GLUT_DOUBLE|GLUT_RGBA|GLUT_MULTISAMPLE);
//
//	glutInitContextVersion (2, 0);
//	glutInitContextFlags (GLUT_COMPATIBILITY_PROFILE );
//
//	glutInitWindowPosition(100,100);
//	glutInitWindowSize(320,320);
//	glutCreateWindow("Hello Textrue!");
//
//
//	//  Callback Registration
//	glutDisplayFunc(renderScene);
//	glutReshapeFunc(changeSize);
//	glutIdleFunc(renderScene);
//
//	//	Mouse and Keyboard Callbacks
//	glutKeyboardFunc(processKeys);
//	glutMouseFunc(processMouseButtons);
//	glutMotionFunc(processMouseMotion);
//
//	glutMouseWheelFunc ( mouseWheel ) ;
//
//	//	Init GLEW
//	//glewExperimental = GL_TRUE;
//	glewInit();
//	if (glewIsSupported("GL_VERSION_2_0"))
//		printf("Ready for OpenGL 2.0\n");
//	else {
//		printf("OpenGL 2.0 not supported\n");
//		exit(1);
//	}
//
//	//  Init the app (load model and textures) and OpenGL
//	if (!init())
//		printf("Could not Load the Model\n");
//
//	printf ("Vendor: %s\n", glGetString (GL_VENDOR));
//	printf ("Renderer: %s\n", glGetString (GL_RENDERER));
//	printf ("Version: %s\n", glGetString (GL_VERSION));
//	printf ("GLSL: %s\n", glGetString (GL_SHADING_LANGUAGE_VERSION));
//
//
//	// return from main loop
//	glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE, GLUT_ACTION_GLUTMAINLOOP_RETURNS);
//
//	//  GLUT main loop
//	glutMainLoop();
//}
//
